/*
 * Compresor_gtest.h
 *
 *  Created on: 30/11/2012
 *      Author: diego
 */

#ifndef COMPRESOR_GTEST_H_
#define COMPRESOR_GTEST_H_

#include "../physical_layer/compresorGammaElias/Compresor.h"

class CompresorTestFixture: public testing::Test {
public:
	//CompresorTestFixture();

    void SetUp()
    {
    }

    void TearDown()
    {
    }

	//virtual ~CompresorTestFixture();
};

TEST_F( CompresorTestFixture, PruebaCompresion){
	Compresor* compresor=new  Compresor(127);
	ColeccionDeBits* coleccionDeBits=compresor->comprimir()->obtenerPrimerosCuatroBits();

	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(0),0);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(1),0);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(2),1);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(3),1);
}

TEST_F( CompresorTestFixture, PruebaCompresion2){
	Compresor* compresor=new  Compresor(5);
	ColeccionDeBits* coleccionDeBits=compresor->comprimir();

	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(0),0);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(1),0);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(2),1);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(3),0);
	
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(4),1);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(5),1);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(6),0);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(7),0);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(8),1);
	
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(9),VALOR_IRRELEVANTE);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(10),VALOR_IRRELEVANTE);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(11),VALOR_IRRELEVANTE);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(12),VALOR_IRRELEVANTE);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(13),VALOR_IRRELEVANTE);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(14),VALOR_IRRELEVANTE);
	ASSERT_EQ(coleccionDeBits->obtenerElementoEnPosicion(15),VALOR_IRRELEVANTE);

}

TEST_F( CompresorTestFixture, PruebaParticionBinaria1)
{
	Compresor* compresor=new  Compresor(723);
	ColeccionDeBits* particionBinaria1=compresor->obtenerParticionBinaria1();

	for(int i=0;i<9;i++)
		ASSERT_EQ(particionBinaria1->obtenerElementoEnPosicion(i),1);
	ASSERT_EQ(particionBinaria1->obtenerElementoEnPosicion(9),0);

}

TEST_F( CompresorTestFixture, PruebaParticionBinaria2)
{
	Compresor* compresor=new  Compresor(723);
	ColeccionDeBits* particionBinaria2=compresor->obtenerParticionBinaria2();

	ASSERT_EQ(particionBinaria2->obtenerElementoEnPosicion(0),0);
	ASSERT_EQ(particionBinaria2->obtenerElementoEnPosicion(1),1);
	ASSERT_EQ(particionBinaria2->obtenerElementoEnPosicion(2),1);
	ASSERT_EQ(particionBinaria2->obtenerElementoEnPosicion(3),0);
	ASSERT_EQ(particionBinaria2->obtenerElementoEnPosicion(4),1);
	ASSERT_EQ(particionBinaria2->obtenerElementoEnPosicion(5),0);
	ASSERT_EQ(particionBinaria2->obtenerElementoEnPosicion(6),0);
	ASSERT_EQ(particionBinaria2->obtenerElementoEnPosicion(7),1);
	ASSERT_EQ(particionBinaria2->obtenerElementoEnPosicion(8),1);

	//pruebo con otros valores
	Compresor* otroCompresor=new  Compresor(211);
	ColeccionDeBits* otraParticionBinaria2=otroCompresor->obtenerParticionBinaria2();

	ASSERT_EQ(otraParticionBinaria2->obtenerElementoEnPosicion(0),1);
	ASSERT_EQ(otraParticionBinaria2->obtenerElementoEnPosicion(1),0);
	ASSERT_EQ(otraParticionBinaria2->obtenerElementoEnPosicion(2),1);
	ASSERT_EQ(otraParticionBinaria2->obtenerElementoEnPosicion(3),0);
	ASSERT_EQ(otraParticionBinaria2->obtenerElementoEnPosicion(4),0);
	ASSERT_EQ(otraParticionBinaria2->obtenerElementoEnPosicion(5),1);
	ASSERT_EQ(otraParticionBinaria2->obtenerElementoEnPosicion(6),1);
}


#endif /* COMPRESOR_GTEST_H_ */
